﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using produccion.clases;
using System.Windows.Input;
using System.Windows;
using System.Collections.ObjectModel;
using System.ComponentModel;
using produccion.modelo;
using produccion.AccesoDatos;
using System.Diagnostics;
using System.Collections.Specialized;
using System.Windows.Controls;
using System.Globalization;
using System.Windows.Media.Imaging;
using System.Data;
using produccion.reportes;

namespace produccion.vistamodelo
{
    public class VMAudOrd : ViewModelBase
    {
        #region Campos
            private ProcesoProduccionRepositorio _repositorio = new ProcesoProduccionRepositorio();//Guarda los metodos que tienen los SP
            private CLSMAEREF _Refencia = new CLSMAEREF();
            private CLSMAECLIP _Clientes = new CLSMAECLIP();
            private string strAuxCliente = "";
            private string strAuxReferencia = "";
            private string strAuxColor = "";
            private string strAuxOrden = "";
        #endregion
        #region Constructor
            public VMAudOrd()
            {
                try
                {
                    if (MDOgeneral.conexion == null || MDOgeneral.conexion.State == ConnectionState.Closed)
                    {
                        MDOgeneral.conectar();
                    }
                    strTituloVentana = "Auditoria de órdenes" + " - Usuario: " + MDOgeneral.usuario + " - [FrmAudOrd]";

                    DateTime dtmFecha = DateTime.Now;
                    dtmFechaInicial = dtmFecha.AddDays(-30);
                    dtmFechaFinal = dtmFecha;

                }
                catch (Exception ex) { MessageBox.Show(ex.Message); }
            }
        #endregion
        #region Interfaces publicas (Propiedades)
            //CODIGO TITULO DEL FORMULARIO
            private string _strTituloVentada;
            public string strTituloVentana
            {
                get { return _strTituloVentada; }
                set
                {
                    _strTituloVentada = value; base.OnPropertyChanged("strTituloVentana");
                }
            }
            //CLIENTE
            public string strCodigoCliente
            {
                get { return _Clientes.CODCLI_CLI; }
                set
                {
                    _Clientes.CODCLI_CLI = value;
                    _Clientes.consultar();
                    if (_Clientes.EXISTE == true)
                    {
                        strNombreCliente = _Clientes.NOMCLI_CLI;
                        Consultar();
                    }
                    else
                    {
                        if (strNombreReferencia == "No exite" || strCodigoReferencia == null)
                        {
                            VMFotoReferencia.strCodigo = "";
                        }
                        if (_Clientes.CODCLI_CLI.Length == 0)
                        {
                            Consultar();
                            strNombreCliente = "";
                        }
                        else
                        {
                            strNombreCliente = "No existe";
                        }
                    }
                    base.OnPropertyChanged("strCodigoCliente");
                    base.OnPropertyChanged("strNombreCliente");
                }
            }
            private string _strNombreCliente;
            public string strNombreCliente
            {
                get { return _strNombreCliente; }
                set
                { _strNombreCliente = value; base.OnPropertyChanged("strNombreCliente"); }
            }
            //REFERENCIA
            public string strCodigoReferencia
            {
                get { return _Refencia.CODREF_REF; }
                set
                {
                    _Refencia.CODREF_REF = value;
                    _Refencia.Consultar();
                    if (_Refencia.EXISTE == true)
                    {
                        strNombreReferencia = _Refencia.NOMREF_REF;
                        VMFotoReferencia.strCodigo = _Refencia.CODREF_REF;
                        Consultar();
                    }
                    else
                    {
                        VMFotoReferencia.strCodigo = "";
                        if (_Refencia.CODREF_REF.Length == 0)
                        {
                            Consultar();
                            strNombreReferencia = "";
                        }
                        else
                        {
                            strNombreReferencia = "No existe";
                        }
                    }
                    base.OnPropertyChanged("strCodigoReferencia");
                    base.OnPropertyChanged("strNombreReferencia");
                }
            }
            private string _strNombreReferencia;
            public string strNombreReferencia
            {
                get { return _strNombreReferencia; }
                set
                { _strNombreReferencia = value; base.OnPropertyChanged("strNombreReferencia"); }
            }
            //FECHA INICIAL
            private DateTime _dtmFechaInicial;
            public DateTime dtmFechaInicial
            {
                get { return _dtmFechaInicial; }
                set
                {
                    _dtmFechaInicial = value;
                    Consultar();
                    base.OnPropertyChanged("dtmFechaInicial"); 
                }
            }
            //FECHA FINAL
            private DateTime _dtmFechaFinal;
            public DateTime dtmFechaFinal
            {
                get { return _dtmFechaFinal; }
                set
                {
                    _dtmFechaFinal = value;
                    Consultar();
                    base.OnPropertyChanged("dtmFechaFinal");
                }
            }
            //FECHA IMAGEN
            private VMvisorFotoReferencia _VMFotoReferencia = new VMvisorFotoReferencia();
            public VMvisorFotoReferencia VMFotoReferencia
            {
                get { return _VMFotoReferencia; }
                set
                { _VMFotoReferencia = value; base.OnPropertyChanged("VMFotoReferencia"); }
            }
            //
            private List<MAudOrd> _LisAudOrd;
            public List<MAudOrd> LisAudOrd
            {
                get { return _LisAudOrd; }
                set
                { _LisAudOrd = value; base.OnPropertyChanged("LisAudOrd"); }
            }
            private VmAuditoriadeOrdenes _selLisauditoria = new VmAuditoriadeOrdenes();
            public VmAuditoriadeOrdenes selLisauditoria
            {
                get { return _selLisauditoria; }
                set 
                { 
                    _selLisauditoria = value;
                    if (_selLisauditoria != null)
                    {
                        VMFotoReferencia.strCodigo = _selLisauditoria.CODREF_DOP;
                        VMFotoReferencia.strColor = _selLisauditoria.CODCOL_DOP;
                        base.OnPropertyChanged("selLisauditoria");
                        base.OnPropertyChanged("VMFotoReferencia"); 
                    }
                }
            }
            private ObservableCollection<VmAuditoriadeOrdenes> _lisauditoria = new ObservableCollection<VmAuditoriadeOrdenes>();
            public ObservableCollection<VmAuditoriadeOrdenes> lisauditoria
            {
                get { return _lisauditoria; }
                set { _lisauditoria = value; base.OnPropertyChanged("lisauditoria"); }
            }
        #endregion
        #region Comandos
            RelayCommand _cmdSalir;
            public ICommand cmdSalir
            {
                get
                {
                    if (_cmdSalir == null)
                    {
                        _cmdSalir = new RelayCommand(Salir);
                    }
                    return _cmdSalir;
                }
            }
            RelayCommand _cmdImprimir;
            public ICommand cmdImprimir
            {
                get
                {
                    if (_cmdImprimir == null)
                    {
                        _cmdImprimir = new RelayCommand(x => imprimir());
                    }
                    return _cmdImprimir;
                }
            }
        #endregion
        #region Metodos
            private void Consultar()
            {
                LisAudOrd = _repositorio.consultarAuditoriaOrdenes(_Clientes.CODCLI_CLI, strCodigoReferencia, dtmFechaInicial, dtmFechaFinal);
                List<VmAuditoriadeOrdenes> all = (from aud in LisAudOrd select new VmAuditoriadeOrdenes(aud)).ToList();
                strAuxCliente = "";
                strAuxReferencia = "";
                strAuxColor = "";
                strAuxOrden = "";
                foreach (VmAuditoriadeOrdenes a in all)
                {
                    if (a.CODCLI_EOP != strAuxCliente)
                    {
                        strAuxCliente = a.CODCLI_EOP;
                        a.logRepiteCliente = true;
                    }
                    else
                        a.logRepiteReferencia = false;
                    if (a.NOMREF_REF != strAuxReferencia)
                    {
                        strAuxReferencia = a.NOMREF_REF;
                        a.logRepiteReferencia = true;
                    }
                    else
                        a.logRepiteReferencia = false;

                    if (a.NOMCOL_COL != strAuxColor)
                    {
                        strAuxColor = a.NOMCOL_COL;
                        a.logRepiteColor = true;
                    }
                    else
                        a.logRepiteColor = false;
                    if (a.NROORD_DOP != strAuxOrden)
                    {
                        strAuxOrden = a.NROORD_DOP;
                        a.logRepiteOrden = true;
                    }
                    else
                        a.logRepiteOrden = false;
                    if (a.PND != 0)
                    {
                        a.logPendiente = true;
                    }
                    else
                    {
                        a.logPendiente = false;
                    }
                }

                lisauditoria = new ObservableCollection<VmAuditoriadeOrdenes>(all);
            }
             public void Salir(Object frmformulario)
            {
                ((Window)frmformulario).Close();
            }
             private string ValidarDato(string StrCampo, string StrDato)
             {
                 if (StrCampo == "No existe")
                 {
                     //StrDato = ""; //Se quita para que pase los parametros como se envian directamente si se va a enviar al informe vacio solo quitar comentario
                 }
                 return StrDato;
             }
             private void imprimir()
             {
                 try
                 {
                    DataTable dtParametros = new DataTable("DtbParametros");
                    dtParametros.Columns.Add("CodigoCliente", System.Type.GetType("System.String"));
                    dtParametros.Columns.Add("NombreCliente", System.Type.GetType("System.String"));
                    dtParametros.Columns.Add("CodigoReferencia", System.Type.GetType("System.String"));
                    dtParametros.Columns.Add("NombreReferencia", System.Type.GetType("System.String"));
                    dtParametros.Columns.Add("FechaInicial", System.Type.GetType("System.String"));
                    dtParametros.Columns.Add("FechaFinal", System.Type.GetType("System.String"));

                    DataRow drParametros;
                    drParametros = dtParametros.NewRow();
                    drParametros["CodigoCliente"] = ValidarDato(strNombreCliente,strCodigoCliente);
                    drParametros["NombreCliente"] = ValidarDato(strNombreCliente, strNombreCliente);
                    drParametros["CodigoReferencia"] = ValidarDato(strNombreReferencia,strCodigoReferencia);
                    drParametros["NombreReferencia"] = ValidarDato(strNombreReferencia, strNombreReferencia);
                    drParametros["FechaInicial"] = dtmFechaInicial.ToString("dd/MM/yyyy");
                    drParametros["FechaFinal"] = dtmFechaFinal.ToString("dd/MM/yyyy");

                    dtParametros.Rows.Add(drParametros);

                    DataTable dtImp = new DataTable("DtbAudOrd");
                    dtImp.Columns.Add("FECORD_EOP");
                    dtImp.Columns.Add("CODCLI_EOP");
                    dtImp.Columns.Add("NOMCLI_CLI");
                    dtImp.Columns.Add("NROPED_EOP");
                    dtImp.Columns.Add("NROORD_DOP");
                    dtImp.Columns.Add("CODREF_DOP");
                    dtImp.Columns.Add("NOMREF_REF");
                    dtImp.Columns.Add("CODCOL_DOP");
                    dtImp.Columns.Add("NOMCOL_COL");
                    dtImp.Columns.Add("CODTAL_DOP");
                    dtImp.Columns.Add("CANORD_DOP");
                    dtImp.Columns.Add("CANCOR_DOP");
                    dtImp.Columns.Add("CANGUA_DOP");
                    dtImp.Columns.Add("CANMON_DOP");
                    dtImp.Columns.Add("CANDES_DOP");
                    dtImp.Columns.Add("CANPRP_DOP");
                    dtImp.Columns.Add("CANPRG_DOP");
                    dtImp.Columns.Add("PND");


                    DataRow dr;
                    foreach (VmAuditoriadeOrdenes i in lisauditoria)
                    {
                        dr = dtImp.NewRow();
                        dr["FECORD_EOP"] = i.FECORD_EOP;
                        dr["CODCLI_EOP"] = i.CODCLI_EOP;
                        dr["NOMCLI_CLI"] = i.NOMCLI_CLI;
                        dr["NROPED_EOP"] = i.NROPED_EOP;
                        dr["NROORD_DOP"] = i.NROORD_DOP;
                        dr["CODREF_DOP"] = i.CODREF_DOP;
                        dr["NOMREF_REF"] = i.NOMREF_REF;
                        dr["CODCOL_DOP"] = i.CODCOL_DOP;
                        dr["NOMCOL_COL"] = i.NOMCOL_COL;
                        dr["CODTAL_DOP"] = i.CODTAL_DOP;
                        dr["CANORD_DOP"] = i.CANORD_DOP;
                        dr["CANCOR_DOP"] = i.CANCOR_DOP;
                        dr["CANGUA_DOP"] = i.CANGUA_DOP;
                        dr["CANMON_DOP"] = i.CANMON_DOP;
                        dr["CANDES_DOP"] = i.CANDES_DOP;
                        dr["CANPRP_DOP"] = i.CANPRP_DOP;
                        dr["CANPRG_DOP"] = i.CANPRG_DOP;
                        dr["PND"] = i.PND;

                        dtImp.Rows.Add(dr);
                    }

                    DataSet ds = new DataSet("dsAudOrd");

                    
                    ds.Tables.Add(dtImp);//Tabla
                    ds.Tables.Add(dtParametros);//Parametros

                    Vista vista = new Vista { ds = ds, reporte = @"reportes\rptAudOrd.rpt"};
                    vista.Show();
                 }
                 catch (Exception ex) { MessageBox.Show(ex.Message); }
             }
        #endregion
    }

    public class VmAuditoriadeOrdenes : ViewModelBase
    {
        #region Campos
            private MAudOrd _auditoria = new MAudOrd();
        #endregion

        #region Constructor
            public VmAuditoriadeOrdenes(MAudOrd auditoria)
            {
                _auditoria = auditoria;
            }

            public VmAuditoriadeOrdenes()
            { 
            
            }
        #endregion

        #region interfaces publicas (Propiedades)

            public DateTime FECORD_EOP
            {
                get { return _auditoria.FECORD_EOP; }
                set { _auditoria.FECORD_EOP = value; base.OnPropertyChanged("FECORD_EOP");}
            }
            
            public string CODCLI_EOP
            {
                get { return _auditoria.CODCLI_EOP; }
                set { _auditoria.CODCLI_EOP = value; base.OnPropertyChanged("CODCLI_EOP");}
            }
            
            public string NOMCLI_CLI
            {
                get { return _auditoria.NOMCLI_CLI; }
                set { _auditoria.NOMCLI_CLI = value; base.OnPropertyChanged("NOMCLI_CLI");}
            }
            
            public Int32 NROPED_EOP
            {
                get { return _auditoria.NROPED_EOP; }
                set { _auditoria.NROPED_EOP = value; base.OnPropertyChanged("NROPED_EOP");}
            }
            
            public string NROORD_DOP
            {
                get { return _auditoria.NROORD_DOP; }
                set { _auditoria.NROORD_DOP = value; base.OnPropertyChanged("NROORD_DOP");}
            }
            
            public string CODREF_DOP
            {
                get { return _auditoria.CODREF_DOP; }
                set { _auditoria.CODREF_DOP = value; base.OnPropertyChanged("CODREF_DOP");}
            }
            
            public string NOMREF_REF
            {
                get { return _auditoria.NOMREF_REF; }
                set { _auditoria.NOMREF_REF = value; base.OnPropertyChanged("NOMREF_REF");}
            }
            
            public string CODCOL_DOP
            {
                get { return _auditoria.CODCOL_DOP; }
                set { _auditoria.CODCOL_DOP = value; base.OnPropertyChanged("CODCOL_DOP");}
            }
            
            public string NOMCOL_COL
            {
                get { return _auditoria.NOMCOL_COL; }
                set { _auditoria.NOMCOL_COL = value; base.OnPropertyChanged("NOMCOL_COL");}
            }
            
            public string CODTAL_DOP
            {
                get { return _auditoria.CODTAL_DOP; }
                set { _auditoria.CODTAL_DOP = value; base.OnPropertyChanged("CODTAL_DOP");}
            }
            
            public Int32 CANORD_DOP
            {
                get { return _auditoria.CANORD_DOP; }
                set { _auditoria.CANORD_DOP = value; base.OnPropertyChanged("CANORD_DOP");}
            }
            
            public Int32 CANCOR_DOP
            {
                get { return _auditoria.CANCOR_DOP; }
                set { _auditoria.CANCOR_DOP = value; base.OnPropertyChanged("CANCOR_DOP");}
            }
            
            public Int32 CANGUA_DOP
            {
                get { return _auditoria.CANGUA_DOP; }
                set { _auditoria.CANGUA_DOP = value; base.OnPropertyChanged("CANGUA_DOP");}
            }
            
            public Int32 CANMON_DOP
            {
                get { return _auditoria.CANMON_DOP; }
                set { _auditoria.CANMON_DOP = value; base.OnPropertyChanged("CANMON_DOP");}
            }
            
            public Int32 CANDES_DOP
            {
                get { return _auditoria.CANDES_DOP; }
                set { _auditoria.CANDES_DOP = value; base.OnPropertyChanged("CANDES_DOP");}
            }
            
            public Int32 CANPRP_DOP
            {
                get { return _auditoria.CANPRP_DOP; }
                set { _auditoria.CANPRP_DOP = value; base.OnPropertyChanged("CANPRP_DOP");}
            }
            
            public Int32 CANPRG_DOP
            {
                get { return _auditoria.CANPRG_DOP; }
                set { _auditoria.CANPRG_DOP = value; base.OnPropertyChanged("CANPRG_DOP");}
            }
            
            public Int32 PND
            {
                get { return _auditoria.PND; }
                set { _auditoria.PND = value; base.OnPropertyChanged("PND");}
            }

            private bool _logRepiteCliente;
            public bool logRepiteCliente
            {
                get { return _logRepiteCliente; }
                set { _logRepiteCliente = value; base.OnPropertyChanged("logRepiteCliente"); }
            }

            private bool _logRepiteReferencia;
            public bool logRepiteReferencia
            {
                get { return _logRepiteReferencia; }
                set { _logRepiteReferencia = value; base.OnPropertyChanged("logRepiteReferencia"); }
            }

            private bool _logRepiteColor;
            public bool logRepiteColor
            {
                get { return _logRepiteColor; }
                set { _logRepiteColor = value; base.OnPropertyChanged("logRepiteColor"); }
            }

            private bool _logRepiteOrden;
            public bool logRepiteOrden
            {
                get { return _logRepiteOrden; }
                set { _logRepiteOrden = value; base.OnPropertyChanged("logRepiteOrden"); }
            }
            private bool _logPendiente;
            public bool logPendiente
            {
                get { return _logPendiente; }
                set { _logPendiente = value; base.OnPropertyChanged("logPendiente"); }
            }
        #endregion

        #region Metodos
            public MAudOrd getAuditoria()
            {
                return _auditoria;
            }
        #endregion
    }
}
